<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Es6实现列表</title>
</head>
<body>
<script>
    //先抽象一个类
    function List(){
        this.listSize=0;//列表元素的个数
        this.pos=0;//列表当前元素
        this.dataStore=[];//初始化一个数组去保存列表元素
        this.clear=clear;//清空所有的数据
        this.find=find;//寻找元素的位置
        this.toString=toString;//返回数组中所有的元素;
        this.insert=insert;//插入
        this.append=append;//从后添加
        this.remove=remove;//删除
        this.front=front;//当前位置移动到第一个位置
        this.end=end;//当前位置移动到后面的位置
        this.prev=prev;//移动到前面一个位置，让那个pos
        this.next=next;//移动到下一个节点位置
        this.length=length;//当前数据的长度
        this.currPos=currPos;//当前位置
        this.moveTo=moveTo;//跳转到当前为指定位置
        this.getElement=getElement;//得到当前位置的元素
        this.contains=contains;//判断是否包含某个元素，js书中用的是查找元素，但是es6有一个实现它的用法。
    }
    //返回当前元素
    function getElement(){
        return this.dataStore[this.pos];
    }
    //让当前位置为第一位
    function front(){
        this.pos=0;
    }
    //让当前位置为最后一位
    function end(){
        this.pos=this.listSize-1;
    }
    //前驱节点
    function prev(){
        if(this.pos>0){
            this.pos--;
        }
    }
    //后集结点
    function next(){
        if(this.pos<this.listSize-1){
            this.pos++;
        }
    }

    //当前位置
    function currPos(){
        return this.pos;
    }

    //移动到指定位置
    function moveTo(position){
        this.pos=position;
    }

    //append给列表添加元素，直接在后面的位置添加一个元素
    function append(element){
        this.dataStore[this.listSize++]=element;
    }


    var list1=new List();
    list1.append("khsdfjksdh");
    list1.append("khsasdsafh");
    list1.append("kfsdf");
    list1.append("khsdfjksdh");
    console.log(list1.toString())
    console.log(list1.length());
    console.log(list1.contains('khsdfjksdh'));
    list1.clear();
    console.log(list1.toString());
    //remove从列表中删除元素
    function find(element){
        for(var i=0;i<this.dataStore.length;i++){
            if(this.dataStore[i]==element){
                return i;
            }
        }
        return -1;
    }
    //删除元素，
    function remove(element){
        var findData=this.find(element);
        if(findData>-1){
            this.dataStoresplice(findData,1);
            --this.listSize;
            return true;
        }
        return false;
    }

    //length，判断长度
    function length(){
        return this.listSize;
    }
    //toString输出所有的数据
    function toString(){
        return this.dataStore;
    }

    //insert
    function insert(ele,after){
        var insertPos=this.find(after);
        //找到after元素的位置，
        if(insertPos>-1){
            //把他插入到他的下一个位置中
            this.dataStore.splice(insertPos+1,0,ele);
            ++this.listSize;
            return true;
        }
        return false;
    }

    //clear清除所有的元素
    function clear(){
        delete this.dataStore;
        this.dataStore=[];
        this.listSize=this.pos=0;
    }

    //contains判断值是否在列表中
    function contains(ele){
        for(var i=0;i<this.dataStore.length;i++){
            if(this.dataStore[i]==ele){
                return true;
            }
        }
        return false;
    }
    //
</script>
</body>
</html>